﻿using ConfExpert.Forms.Base;
using ConfExpert.Utility;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using DevExpress.XtraVerticalGrid.Events;
using DevExpress.XtraVerticalGrid.Rows;
using DevTeam;

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace ConfExpert.Forms.SatinAlma.YeniYapi
{
    public partial class SiparisTakip : XForm
    {
        public SiparisTakip()
        {
            InitializeComponent();
        }

        private void POOzetV2_Load(object sender, EventArgs e)
        {
            gvAyrimlar.Init("GETPOTakipFiltered4", "AÇIK", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, string.Empty, string.Empty);
            gvAyrimlar.AddDetailGrid(gvKonfirmasyon, "AyrimlarId");
            gvKonfirmasyon.AddDetailGrid(gvYukleme, "KonfId");

            gvAyrimlar.SetViewCaption("Talepler");
            gvYukleme.SetViewCaption("Yüklemeler");

            gvKonfirmasyon.SetViewCaption("Konfirmasyonlar");

            gvAyrimlar.MakeColumnInvisible("AyrimlarId", "EF");

            gvAyrimlar.SetCaptions("PONr:PO Nr.",
                                    "SiparisTarihi:Sip. Tarihi",
                                    "PODurumId:Durum",

                                    "CadHl:İstekler",
                                    "QtyTalep:Talep mt.",
                                    "ToplamYuklenenMt:Yüklenen mt.",
                                    "ToplamYuklemeAdedi:Yükleme adedi",
                                    "ToplamGelenMt:Gelen mt.",
                                    "ToplamGelisPartisiAdedi:Geliş adedi",
                                    "ToplamKonfirmeMt:Konfirme mt.",
                                    "ToplamKonfirmasyonAdedi:Konfirme adedi",
                                    "SKTeknikOzellik:SK Teknik",
                                    "TalepTeknikOzellik:MP Teknik Talep",

                                    "OrderRef:Order Ref.",
                                    "MusteriKodu:Müşteri Kodu",
                                    "UreticiKodu:Üretici Kodu",
                                    "Notes:MP Notlari",
                                    "VendorNotes:Üretici Notları",
                                    "GHesapFiyati:Göm.Hes.Fiyatı",
                                    "KumasFiyati:Kumaş Fiyatı",
                                    "KaliteId:Kalite",
                                    "KaliteAciklama:Kalite Açıklama",
                                    "Konstruksiyon:Konstruksiyon",
                                    "HLNo:H/L No",
                                    "CadNo:Cad No",
                                    "KstCategoryId:Kategori1",
                                    "KstCategory2Id:Kategori2",
                                    "KabulTarihi:Kabul Tarihi",
                                    "CurrencyId:Parabirimi",
                                    "RedSebebi:Red Sebebi",
                                    "YikamaRecetesi:Yıkama Reçetesi",
                                    "BirimMetraj:Birim Metraj",
                                    "GomlekAdedi:Gömlek Adedi",
                                    "UreticiSipNo:Üretici Sip.No.",
                                    "UserId:Kullanıcı",
                                    "GomlekTermini:Gömlek Termini",
                                    "GerShipments:Yüklemeler",
                                    "OngYuklemeler:Öng. Yüklemeler",
                                    "AnlasilanFiyat:Fiyat",
                //"PaymentTermId:Ödeme Termini",
                //"PaymentMethodId:Ödeme Şekli",                                                                                 
                                    "calcETA:ETA",
                                    "PONotes:PO Notları",
                                    "YuklenenEF:Yüklenen E/F",
                                    "SiraNo:Sıra"
                                    );

            gvAyrimlar.YanYanaGetirSoluna("stGenelId", "SiparisTarihi");
            gvAyrimlar.YanYanaGetir("OngYuklemeler:GerShipments");
            gvAyrimlar.MakeColumnInvisible("ToplamYuklemeAdedi", "ToplamGelisPartisiAdedi", "ToplamKonfirmasyonAdedi");

            gvAyrimlar.FormatAsDate("GomlekTermini");
            gvAyrimlar.FormatAsNumber(1, "QtyTalep", "ToplamYuklenenMt", "ToplamGelenMt", "ToplamKonfirmeMt", "KalanYukleme");
            gvAyrimlar.AddSummary("QtyTalep", "ToplamYuklenenMt", "ToplamGelenMt", "ToplamKonfirmeMt", "KalanYukleme");

            gvYukleme.SetCaptions("YuklemeId:Yükleme ID",
                                    "FaturaNo:Fatura No",
                                    "FaturaTarihi:Fatura Tarihi",
                                    "IrsaliyeNo:İrsaliye No",
                                    "IrsaliyeTarihi:İrsaliye Tarihi",
                                    "CurrencyId:Parabirimi",
                                    "YuklenenMt:Yüklenen mt.",
                                    "Degisim:± %",
                                    "MasrafKalemiId:± % Açıklama",
                                    "UserId:Depoya Alan",
                                    "KalanGun:Kalan Gün",
                                    "GelisTarihi:Geliş Tarihi"
                                    );

            gvYukleme.FormatAsDate("FaturaTarihi", "IrsaliyeTarihi", "ETD", "ETA");
            gvYukleme.FormatAsNumber(1, "YuklenenMt");

            gvKonfirmasyon.SetCaptions("Degisim:± %",
                                        "MasrafKalemiId:± % Açıklama",
                                        "ShipMethodId:Yükleme Şekli",
                                        "PaymentTermId:Ödeme Termini",
                                        "PaymentMethodId:Ödeme Şekli",
                                        "CarrierId:Kargo",
                                        "UserId:Ekleyen",
                                        "CurrencyId:Parabirimi"
                                        );

            gvKonfirmasyon.FormatAsDate("KonfirmasyonTarihi", "OngShipDate", "RevShipDate", "ETA");
            gvKonfirmasyon.FormatAsNumber(1, "KonfMt");
            gvKonfirmasyon.FormatAsNumber(2, "Fiyat");

            //RepositoryItemHyperLinkEdit ri = new RepositoryItemHyperLinkEdit();
            //gvYukleme.Columns["YuklemeId"].ColumnEdit = ri;
            //ri.SingleClick = true;
            //gvYukleme.RowCellClick += riYukleme_Click;

            gvAyrimlar.DoubleClick += gvAyrimlar_DoubleClick;

            //ri = new RepositoryItemHyperLinkEdit();
            //gvKonfirmasyon.Columns["KonfId"].ColumnEdit = ri;

            gvYukleme.MakeReadOnly();
            gvKonfirmasyon.MakeReadOnly();

            splitContainerControl1.AutoSize();
            splitContainerControl1.PanelVisibility = DevExpress.XtraEditors.SplitPanelVisibility.Panel1;

            gvAyrimlar.FocusedRowChanged += gvAyrimlar_FocusedRowChanged;
            gvKonfirmasyon.FocusedRowChanged += gvKonfirmasyon_FocusedRowChanged;

            this.Text = "Sipariş Takip";

            gvAyrimlar.FormatAsNumber(0, /*"GelenEF",*/ "YuklenenEF");

            //GridFormatRule gridFormatRule = new GridFormatRule();
            //FormatConditionRuleDataBar formatConditionRuleDataBar = new FormatConditionRuleDataBar();
            //gridFormatRule.Column = gvAyrimlar.Columns["GelenEF"];
            //formatConditionRuleDataBar.PredefinedName = "Blue Gradient";
            //gridFormatRule.Rule = formatConditionRuleDataBar;
            //gvAyrimlar.FormatRules.Add(gridFormatRule);

            gridFormatRuleY = new GridFormatRule();
            FormatConditionRuleDataBar formatConditionRuleDataBarY = new FormatConditionRuleDataBar();
            gridFormatRuleY.Column = gvAyrimlar.Columns["YuklenenEF"];
            formatConditionRuleDataBarY.PredefinedName = "Green Gradient";
            gridFormatRuleY.Rule = formatConditionRuleDataBarY;
            gvAyrimlar.FormatRules.Add(gridFormatRuleY);

            //GridFormatRule gridFormatRule2 = new GridFormatRule();
            //FormatConditionRule2ColorScale formatConditionRule2ColorScale = new FormatConditionRule2ColorScale();
            //gridFormatRule2.Column = gvAyrimlar.Columns["QtyTalep"];
            //formatConditionRule2ColorScale.PredefinedName = "Green, White, Red";
            //gridFormatRule2.Rule = formatConditionRule2ColorScale;
            //gvAyrimlar.FormatRules.Add(gridFormatRule2);


            //    color = new Color[]{
            //    Color.White,
            //    Color.White,
            //    Color.LightYellow,
            //    Color.Khaki,
            //    Color.Gold,
            //    Color.Gold,
            //    Color.YellowGreen,
            //    Color.GreenYellow,
            //    Color.Tomato,
            //    Color.Tomato,
            //    Color.Gainsboro
            //};


            gvAyrimlar.SetAlternateRowStyle(true);

            CreateVerticalGrid();

            LoadLayout();

            btnTemizle.Click += btnTemizle_Click;
            btnGetir.Click += btnGetir_Click;

            gvAyrimlar.MakeReadOnly();
            gvKonfirmasyon.MakeReadOnly();
            gvYukleme.MakeReadOnly();

            gvAyrimlar.BestFitColumns();
            gvYukleme.BestFitColumns();
            gvKonfirmasyon.BestFitColumns();
        }

        void gvAyrimlar_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            //GridManager gm = GridManager.GetManager(gvKonfirmasyon);
            //gm.gridUtility.ShowOnlyEmptyColumns(true);

            RefreshYuklemeAdedi();
            gvKonfirmasyon.BestFitColumns();
            gvYukleme.BestFitColumns();
        }

        void gvKonfirmasyon_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            //    GridManager gm = GridManager.GetManager(gvYukleme);
            //    gm.gridUtility.ShowOnlyEmptyColumns(true);

            RefreshYuklemeAdedi();
            gvYukleme.BestFitColumns();
        }

        void gvAyrimlar_DoubleClick(object sender, EventArgs e)
        {
            GridView view = (GridView)sender;
            Point pt = view.GridControl.PointToClient(Control.MousePosition);

            GridHitInfo info = view.CalcHitInfo(pt);
            if (info.RowHandle > -1)
                if (info.InRow || info.InRowCell)
                {
                    string ponr = view.GetRowCellValue(info.RowHandle, "PONr").ToStr();

                    int poId = ponr.Split('/')[0].ToInt();
                    if (poId > 0)
                        AppSession.MainForm.ShowMdiChildForm(typeof(PO), poId, true);
                }
        }

        void btnGetir_Click(object sender, EventArgs e)
        {
            gvAyrimlar.FormatRules.Remove(gridFormatRuleY);

            gvAyrimlar.RefreshDataSource("GETPOTakipFiltered4",
                strParse(GetVal("Durum")),
                intParse(GetVal("PODurumId")),

                intParse(GetVal("TalepTipiId")),
                intParse(GetVal("UserId")),
                intParse(GetVal("POId")),
                intParse(GetVal("POLinesId")),
                intParse(GetVal("POSipId")),
                intParse(GetVal("ProductId")),
                intParse(GetVal("KstCategoryId")),
                intParse(GetVal("KstCategory2Id")),

                intParse(GetVal("VendorId")),
                intParse(GetVal("BrandId")),
                intParse(GetVal("SezonId")),
                strParse(GetVal("OrderRef")),
                strParse(GetVal("Notes"))
                );

            gvAyrimlar.FormatRules.Add(gridFormatRuleY);
            gvAyrimlar.BestFitColumns();
        }

        bool inProgress = false;
        void RefreshYuklemeAdedi()
        {
            if (!inProgress)
            {
                inProgress = true;
                tpYukleme.PageVisible = gvYukleme.RowCount > 0;
                tpYukleme.Text = "Seçili Konfirmasyonun Yüklemeleri - " + gvYukleme.RowCount;
                inProgress = false;
            }
        }

        private void CreateVerticalGrid()
        {
            vgc.Rows.AddRange(new BaseRow[] {
                AddItem("Durum", typeof(string), riGenel),
                AddItem("PODurumId", typeof(int), RI(Rp.PODurum)),

                AddItem("TalepTipiId", typeof(int), RI(Rp.TalepTipi)),
                AddItem("UserId", typeof(int), RI(Rp.V_User)),
                AddItem("POId", typeof(int)),
                AddItem("POLinesId", typeof(int)),
                AddItem("POSipId", typeof(int)),
                AddItem("ProductId", typeof(int), RI(Rp.V_Kumas)),
                AddItem("KstCategoryId", typeof(int), RI(Rp.KstCategory)),
                AddItem("KstCategory2Id", typeof(int), RI(Rp.KstCategory2)),

                AddItem("VendorId", typeof(int), RI(Rp.Vendor)),
                AddItem("BrandId", typeof(int), RI(Rp.Brand)),
                AddItem("SezonId", typeof(int), RI(Rp.Sezon)),
                AddItem("OrderRef", typeof(string)),
                AddItem("Notes", typeof(string))
                //AddItem("BaslangicTarihi", typeof(DateTime), new RepositoryItemDateEdit()),
                //AddItem("BitisTarihi", typeof(DateTime), new RepositoryItemDateEdit()),
            });

            vgc.Rows.GetRowByFieldName("Notes", true).Height = 60;
            vgc.Rows.GetRowByFieldName("KstCategoryId", true).Properties.Caption = "Kategori1";
            vgc.Rows.GetRowByFieldName("KstCategory2Id", true).Properties.Caption = "Kategori2";

            vgc.OptionsBehavior.UseEnterAsTab = true;
            vgc.LayoutStyle = DevExpress.XtraVerticalGrid.LayoutViewStyle.SingleRecordView;
            vgc.CustomDrawRowHeaderCell += new CustomDrawRowHeaderCellEventHandler(vgc_CustomDrawRowHeaderCell);
            vgc.Appearance.RowHeaderPanel.BackColor = Color.LightBlue;

            vgc.SetCellValue(vgc.Rows["Durum"], 0, "AÇIK");
            vgc.FocusedRow = vgc.Rows["Durum"];
            vgc.BestFit();
        }

        Color[] color;

        void gvAyrimlar_RowCellStyle(object sender, RowCellStyleEventArgs e)
        {
            if (e.RowHandle > -1)
                if (e.Column.FieldName == "PODurumId")
                {
                    int durum = e.CellValue.ToInt(-1);
                    //if (durum == 7)
                    //    e.Appearance.ForeColor = Color.Green;
                    //e.Appearance.ForeColor = color[durum];
                    e.Appearance.BackColor = e.Appearance.BackColor2 = color[durum];
                }
        }

        //void riYukleme_Click(object sender, EventArgs e)
        //{
        //    return;
        //    int YuklemeId = ((DevExpress.XtraEditors.HyperLinkEdit)(sender)).Text.ToInt(-1);
        //    Yuklemeler y = new Yuklemeler();
        //    AppSession.MainForm.ShowMdiChildForm(typeof(Yuklemeler),YuklemeId);
        //}

        public BaseRow AddItem(string name, Type t, params RepositoryItem[] ri)
        {
            return AddItem(vgc, name, t, ri);
        }

        object GetVal(string FieldName)
        {
            return vgc.GetCellValue(vgc.Rows[FieldName], vgc.FocusedRecord);
        }

        void btnTemizle_Click(object sender, EventArgs e)
        {
            foreach (BaseRow r in vgc.Rows)
                vgc.SetCellValue(r, 0, null);
        }

        void PrepareImageComboBoxEdit(GridView gv, string colName, string opts)
        {
            RepositoryItemImageComboBox imageCombo = gv.GridControl.RepositoryItems.Add("ImageComboBoxEdit") as RepositoryItemImageComboBox;
            imageCombo.Items.BeginUpdate();
            int ndx = 0;
            imageCombo.SmallImages = noktalar;

            foreach (string opt in opts.Split('|'))
                imageCombo.Items.Add(new ImageComboBoxItem(opt, ndx++));
            //imageCombo.GlyphAlignment = DevExpress.Utils.HorzAlignment.Default;
            imageCombo.Items.EndUpdate();
            gv.Columns[colName].ColumnEdit = imageCombo;
        }

        //int Max = 100;
        Color posColor = Color.YellowGreen, negColor = Color.OrangeRed;

        private void chkKonfirmasyonlar_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            splitContainerControl1.PanelVisibility = chkKonfirmasyonlar.Checked ? DevExpress.XtraEditors.SplitPanelVisibility.Both : DevExpress.XtraEditors.SplitPanelVisibility.Panel1;
        }

        private void btnSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            this.Cursor = Cursors.WaitCursor;
            List<string> pairs = new List<string>();
            for (int i = 0; i < gvAyrimlar.VisibleColumns.Count; i++)
            {
                DevExpress.XtraGrid.Columns.GridColumn col = gvAyrimlar.VisibleColumns[i];
                string pair = col.FieldName + ":" + i.ToString() + ":" + col.Width;
                pairs.Add(pair);
            }
            string result = String.Join(",", pairs);

            AppSession.Settings.POOzetColumns = result;
            AppSession.Settings.Save();
            ShowInfoMessage("Sütunların sırası, görünürlüğü ve genişliği kaydedildi. Form, artık sizin için bu şekilde açılacak.");
            this.Cursor = Cursors.Default;
        }

        private void btnReset_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            AppSession.Settings.POOzetColumns = "";
            AppSession.Settings.Save();
            ShowInfoMessage("Form düzeni silindi. Formu kapatıp açarsanız varsayılan şekilde açılacak.");
        }

        private void LoadLayout()
        {
            this.Cursor = Cursors.WaitCursor;

            if (AppSession.Settings.POOzetColumns != "")
            {
                foreach (DevExpress.XtraGrid.Columns.GridColumn gc in gvAyrimlar.Columns)
                    gc.Visible = false;

                foreach (string pair in AppSession.Settings.POOzetColumns.Split(",".ToCharArray()))
                {
                    try
                    {
                        string[] vals = pair.Split(":".ToCharArray());
                        string colName = vals[0];
                        int index = vals[1].ToInt(-1);
                        int width = vals[2].ToInt(-1);
                        gvAyrimlar.Columns[colName].VisibleIndex = index;
                        gvAyrimlar.Columns[colName].Width = width;
                    }
                    catch
                    {
                        ShowErrorMessage("Sütun değişiklikleri olduğu için sütunları yeniden düzenlemelisiniz.");

                        foreach (DevExpress.XtraGrid.Columns.GridColumn gc in gvAyrimlar.Columns)
                            gc.Visible = true;

                        AppSession.Settings.POOzetColumns = "";
                        AppSession.Settings.Save();
                        this.Cursor = Cursors.Default;
                        return;
                    }
                }
            }
            this.Cursor = Cursors.Default;
        }
        GridFormatRule gridFormatRuleY;

    }
}
